# 1-导包
import pymysql


# 2-定义方法
def db_execute_util(sql):
    """
    封装一个数据库执行SQL的工具方法，返回执行的结果
    :param sql: 要执行的SQL语句
    :return: 执行的结果
    """
    # 初始化连接和游标的默认值，解决警告问题
    conn = None
    cur = None

    try:  # 执行可能出现异常的代码
        # 3-创建连接[后续项目使用，只要修改数据库连接配置即可]
        conn = pymysql.connect(host="211.103.136.244", user="student", charset='utf8',
                               password="KDTX_student_202304",port=7068, database="huike")
        # 4-创建游标
        cur = conn.cursor()
        # 5-执行SQL，返回结果：判断SQL语句开头是否是select，如果是就是查询，否则就是增删改
        # 使用字符串切割split，默认使用空格切割,返回列表，取列表的第1个值-->取到第1个值
        # 将取到的字符串转为小写，然后进行判断lower()-->默认转为小写
        if sql.split()[0].lower() == 'select':  # 查询语句
            # 执行SQL
            cur.execute(sql)
            # 返回执行的结果fetchall
            return cur.fetchall()
        else:  # 增删改 更新语句
            # 执行SQL
            cur.execute(sql)
            # 提交事务
            conn.commit()
            # 返回执行的结果:被影响的行数
            return f"数据库SQL增删改语句执行的结果：{conn.affected_rows()}"
    except Exception as e:  # 出现异常要执行的代码
        # 执行回滚
        conn.rollback()
        # 打印异常信息
        print(f"数据库SQL执行出现异常：{e}")
    finally:  # 不管执行结果是否异常，都需要关闭资源
        # 6-关闭游标
        cur.close()
        # 7-关闭连接
        conn.close()